package top.stmo.mp;


/**
 *
 *   修改的时候，只修改实体对象中有值的字段
 *
 *   ------------------------Mybatis-Plus----------------------------
 *
 *   条件查询
 *      eq()： 相当于 = ,对应的sql语句为
 *      selectList：查询结果为多个或者单个
 *      selectOne:查询结果为单个
 *      gt():大于(>)
 *      ge():大于等于(>=)
 *      lt():小于(<)
 *      lte():小于等于(<=)
 *      between():between ? and ?
 *      like():前后加百分号,如 %J%
 *      likeLeft():前面加百分号,如 %J
 *      likeRight():后面加百分号,如 J%
 *
 *      @TableField     设置当前属性对应的数据库表中的字段关系
 *      value(默认)：设置数据库表字段名称
 *      exist:设置属性在数据库表字段中是否存在，默认为true，此属性不能与value合并使用
 *      select:设置属性是否参与查询，此属性与select()映射配置不冲突
 *
 *      @TableName      设置当前类对应于数据库表关系
 *      value(默认)：设置数据库表名称
 *
 *      @TableId        设置当前类中主键属性的生成策略
 *      value(默认)：设置数据库表主键名称
 *      type:设置主键属性的生成策略，值查照IdType的枚举值
 *
 *      @TableId(type = IdType.AUTO)
 *      private Long id;
 *
 *      生成策略:
 *          NONE: 不设置id生成策略
 *          INPUT:用户手工输入id
 *          ASSIGN_ID:雪花算法生成id(可兼容数值型与字符串型)
 *          ASSIGN_UUID:以UUID生成算法作为id生成策略
 *          其他的几个策略均已过时，都将被ASSIGN_ID和ASSIGN_UUID代替掉。
 *
 *   -------------------------逻辑删除----------------------------
 *
 *   物理删除:
 *     业务数据从数据库中丢弃，执行的是delete操作
 *   逻辑删除:
 *     为数据设置是否可用状态字段，删除时设置状态字段为不可用状态，数据保留在数据库中，执行的是update操作
 *
 *   @TableLogic        标识该字段为进行逻辑删除的字段
 *   value：逻辑未删除值
 *   delval:逻辑删除值
 *
 *   -------------------------乐观锁----------------------------
 *
 *   解决并发现象：乐观锁主要解决的问题是当要更新一条记录的时候，希望这条记录没有被别人更新
 *
 *   乐观锁的实现方式:
 *      数据库表中添加version列，比如默认值给1
 *      第一个线程要修改数据之前，取出记录时，获取当前数据库中的version=1
 *      第二个线程要修改数据之前，取出记录时，获取当前数据库中的version=1
 *      第一个线程执行更新时，set version = newVersion where version = oldVersion
 *          newVersion = version+1 [2]
 *           oldVersion = version [1]
 *      第二个线程执行更新时，set version = newVersion where version = oldVersion
 *          newVersion = version+1 [2]
 *          oldVersion = version [1]
 *      假如这两个线程都来更新数据，第一个和第二个线程都可能先执行
 *      假如第一个线程先执行更新，会把version改为2
 *      第二个线程再更新的时候，set version = 2 where version = 1,此时数据库表的数
 *      据version已经为2，所以第二个线程会修改失败
 *      假如第二个线程先执行更新，会把version改为2，
 *      第一个线程再更新的时候，set version = 2 where version = 1,此时数据库表的数
 *      据version已经为2，所以第一个线程会修改失败
 *      不管谁先执行都会确保只能有一个线程更新数据，这就是MP提供的乐观锁的实现原理分析。
 *
 *      步骤：
 *          数据库加version字段
 *          实体类加version属性
 *          mp拦截器中添加乐观锁
 *          执行更新操作
 *
 */
public class Test1 {

}
